home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 158_01 / qe7 < prev    next >
Text File  |  1987-10-10  |  3KB  |  184 lines

  1. /*  VERSION 0003  (DATE: 30/04/87)  (TIME: 12:54)  */
  2. /*
  3.     e (qe) screen editor
  4.  
  5.     (C) G. Nigel Gilbert, MICROLOGY, 1981
  6.  
  7.     August-December 1981
  8.     Modified: To QE from e (ver 4.6a) by J.W. Haefner -- Oct 84-Mar 85
  9.  
  10.     FILE: qe7
  11.  
  12.     FUNCTIONS: getkey,testkey,getlow,testlow,getscankey,inkey,putret,
  13.             dispch,putch,inword,uspr,makedim,makebright,
  14.             putclr,dohelp
  15.            
  16.     PURPOSE: low level terminal i/o functions
  17.  
  18. */
  19.  
  20. #include "qe.h"
  21.  
  22. getkey()    /*wait for a key to be pressed & return it, translating
  23.             to internal codes */
  24. {
  25.     char c;
  26.  
  27.     while (!(c=testkey()));
  28.     return c;
  29. }
  30.  
  31. testkey()    /*if a key has been pressed, return it, else 0, translating*/
  32. {
  33.     char c, *tranp;
  34.     int i;
  35.  
  36.     if (!(c=inkey())) return 0;
  37.     if (c == *(tranp=tran)) {
  38.         while (!(c=inkey()));
  39.         c|=PARBIT;
  40.         }
  41.     if (c == BACKSP) return LEFTKEY;    /* synonym for move cursor left*/
  42.     for (i=1,tranp++; i < NKEYS; i++, tranp++)
  43.         if (c == *tranp) return i;
  44.     return c;
  45. }
  46.  
  47. getlow()    /*get a key, converting control and u/c keys to l/c,
  48.             translation of ESCKEY only */
  49. {
  50.     char c;
  51.     
  52.     while (!(c=testlow()));
  53.     return c;
  54. }
  55.  
  56. testlow()    /*test for a key, convert upper and control chars to lower case*/
  57. {
  58.     char c;
  59.  
  60.     if (!(c=inkey())) return 0;
  61.     if (tran[ESCKEY] == c) return ESCKEY;
  62.     if (c < ' ') c=c+96;
  63.     return (c >= 'A' && c <= 'Z' ? c+32 : c);
  64. }
  65.  
  66. getscankey()    /*get a key, translation of ESCKEY, CR, LEFTKEY, DELLEFT,
  67.                       RETRIEVE only. Return parity bit set. */
  68. {
  69.     char c;
  70.     
  71.     while (!(c=inkey()));
  72.     if (tran[ESCKEY] == c) return (ESCKEY_P);
  73.     if (tran[CR] == c) return (CR_P);
  74.     if (tran[LEFTKEY] == c) return (LEFTKEY_P);
  75.     if (tran[DELLEFT] == c) return (DELLEFT_P);
  76.     if (tran[RETRIEVE] == c) return (RETRIEVE_P);
  77.     
  78.     return c;
  79. }
  80.  
  81. inkey()        /*return last key press,or 0 if none*/
  82. {
  83.     char c;
  84.     sint i;
  85.  
  86.     if (inbufp) {
  87.         c=inbuf[0];
  88.         inbufp--;
  89.         for (i=0; i < inbufp; i++) inbuf[i]=inbuf[i+1];
  90.         }
  91.     else c=bdos(DIRIO,0xff) & ~PARBIT;
  92.     return c;
  93. }
  94.  
  95. putret()    /*type a CR/LF*/
  96. {
  97.     putch('\r');
  98.     putch('\n');
  99. }
  100.  
  101. dispch(c)    /*type a character (in different intensity if non-printable*/
  102. char c;
  103. {
  104.     if (c < ' ') {
  105.         makeother();
  106.         /*putch(c+64);*/
  107.         bdos(DIRIO,c+64);
  108.         makeother();
  109.         }
  110.     else bdos(DIRIO,c);        /*putch(c);*/
  111. }
  112.  
  113. putch(c)    /*type a character; test for keyboard input*/
  114. char c;
  115. {
  116.     bdos(DIRIO,c);
  117.     if ( (c=bdos(DIRIO,0xff))) inbuf[inbufp++]=c & ~PARBIT;
  118. }
  119.  
  120. inword(c)    /*return true if c is letter or digit*/
  121. char c;
  122. {
  123.     return  isalpha(c) || isdigit(c);
  124. }
  125.  
  126. uspr(n)        /*print 'n' as a number; return number of chars typed*/
  127. unsigned n;
  128. {
  129.     int temp;
  130.  
  131.     if (n < 10) {
  132.         putch(n+'0');
  133.         return 1;
  134.         }
  135.     temp=uspr(n/10);
  136.     uspr(n%10);
  137.     return temp+1;
  138. }
  139.  
  140. makedim()
  141. {
  142.     if (!isdim) {
  143.         begdim();
  144.         isdim=YES;
  145.         }
  146. }
  147.  
  148. makebright()
  149. {
  150.     if (isdim) {
  151.         enddim();
  152.         isdim=NO;
  153.         }
  154. }
  155.  
  156. makeother()
  157. {
  158.     if (isdim) makebright();
  159.     else makedim();
  160. }
  161.  
  162. putclr()    /*clear the screen */
  163. {
  164.     delpage(0);
  165. }
  166.  
  167. dohelp()    /*display help menu */
  168. {
  169.     int y;
  170.  
  171.     pfirst=loc(pfirst,(HELPLINES-topline));
  172.     topline=HELPLINES;
  173.     for (y=1; y < HELPLINES; y++) deleteline(y);
  174.     if (cline < pfirst || pfirst == lastl) {
  175.         puttext(); 
  176.         putpage(); 
  177.         }
  178.     gotoxy(0,1);
  179.     displayhelp();
  180. }
  181. har c;
  182.  
  183.     if (!(c=inkey())) return 0;
  184.     if (tran[ESCKEY] == c) return ESCKEY;